Napichnuti na okenni proceduru
Otázka od: Petr Brant
8. 10. 2002 8:31
Ahoj vespolek, placam komponentu, ve ktere se potrebuji napichnout na okenni
proceduru EditBoxu. Delam to takto:
procedure TAdvancedEditBox.SetAssignedEdit(const Value: TEdit);
var p: pointer;
begin
FAssignedEdit := Value;
if Value<> nil then
begin
{ napíchnutí na wnd proceduru poioazeného editu... }
if AssignedEditHandle<> 0 then SetWindowLong(AssignedEditHandle,
GWL_WNDPROC, LongInt(PrevEditWndProc));
{pokud by se poioazovalo za bihu...}
AssignedEditHandle:= Value.Handle;
PrevEditWndProc := Pointer(GetWindowLong(Value.Handle, GWL_WNDPROC));
p := MakeObjectInstance(NewEditWndProc);
SetWindowLong(Value.Handle, GWL_WNDPROC, LongInt(p));
end else
begin
{ návrat k puvodní wnd proceduoe...}
SetWindowLong(AssignedEditHandle, GWL_WNDPROC, LongInt(PrevEditWndProc));
AssignedEditHandle:= 0;
end;
end;
Pracuje to v pohode, ale chci se zeptat pritomnych odborniku, zda neni neco
takoveho jiz zapouzdreno ve VCL, tohle mam jen odnekud opsane a nejsem si na
100 % jist, zda to je koser.
Diky a zdravim
RNDr. Petr Brant [brant@dcomm.cz]
D&COMM s.r.o.
Korunovační 6
Praha 7
tel. +420724007234
Odpovedá: Blazek Jaroslav
8. 10. 2002 11:33
Ahoj,
> brant@dcomm.cz 8.10.02 8:23 >>>
>Ahoj vespolek, placam komponentu, ve ktere se potrebuji napichnout na okenni
>proceduru EditBoxu. Delam to takto:
private
OldWndProc:TWndMethod;
procedure NewWndProc(var AMsg : TMessage);
constructor TNewEdit.Create(AOwner : TComponent);
begin
inherited;
OldWndProc := WindowProc;
WindowProc := NewWndProc;
end;
procedure TNewEdit.NewWndProc(var AMsg : TMessage);
begin
// nejaky kod
OldWndProc(AMsg);
end;
S pozdravem
Bc. Jaroslav Blazek
Access-IT Ceska Lipa
mailto:jaroslav.blazek@access-it.cz
http://www.access-it.cz
ICQ# : 133673990
+420605/813644